package AnaliseLexicaFinal.EstruturaDeDados;

import java.util.Hashtable;


/**
 * Classe para manipular a Tabela de Simbolos, que
 * armazena as palavras reservadas e identificadores
 * @author nathy - implementa&ccedil&atildeo
 * @author Elisson - revis&atildeo
 */
public class TabelaSimbolos {
	
	private Hashtable<String, String> tabelasimbolos = new Hashtable<String, String>();
    
	private String[] palavrasreservadas={"include", "const", "struct", "typedef",
        "function", "return", "void", "main", "if", "else", "while", "for",
        "do", "scanf", "printf", "char", "int", "float", "boolean","true",
        "false","string","charconst"};
    
	public TabelaSimbolos(){
		setPalavrasReservadas(); //Instancia as palavras reservadas na tabela de simbolos
	}
	
 	/**
     * Armazena em uma estrutura de dados todas as <i>palavras reservadas</i>
     * @param palReser - <i>Palavra reservadas</i>
     * @return void
     */
	 public void setPalavrasReservadas(){
		for(int i = 0;i < palavrasreservadas.length; i++)
	        tabelasimbolos.put(palavrasreservadas[i], palavrasreservadas[i]);
	 }
	 
	 /**
	  * Instancia o token na tabela de simbolos, caso nao ja esteje instanciado
	  * @param lexema - Lexema do token
	  * @return - Token real, identificador ou palavra reservada
	  */
	 public String instanciaToken(String lexema){
		 if(tabelasimbolos.get(lexema) != null)
			 return tabelasimbolos.get(lexema);
		 else{
			 tabelasimbolos.put(lexema, "identificador");
			 return "identificador";
		 }
	 }
}
